name: Java CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  java_build:
    strategy:
      matrix:
        java_version: [8, 11, 17, 21]
        include:
          - java_version: '8'
            included_modules: '-pl !code-execution-engines/langchain4j-code-execution-engine-graalvm-polyglot,!langchain4j-cassandra,!langchain4j-infinispan,!langchain4j-neo4j,!langchain4j-opensearch'
          - java_version: '11'
            included_modules: '-pl !code-execution-engines/langchain4j-code-execution-engine-graalvm-polyglot,!langchain4j-infinispan,!langchain4j-neo4j'
          - java_version: '17'
            included_modules: '-pl !code-execution-engines/langchain4j-code-execution-engine-graalvm-polyglot'
          - java_version: '21'
            included_modules: ''
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java_version }}
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java_version }}
          distribution: 'temurin'
          cache: 'maven'
      - name: Build with JDK ${{ matrix.java_version }}
        run: mvn --batch-mode install -DskipITs ${{ matrix.included_modules }}

  # For checking some compliance things (require a recent JDK due to plugins so in a separate step)
  compliance:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: 'maven'
        # Check we only rely on permissive licenses in the main parts of the library:
      - name: License Compliance
        run: mvn -P compliance org.honton.chas:license-maven-plugin:compliance

# TODO's
# - enable JDK 17 unit tests for langchain4j-code-execution-engine-graalvm-polyglot
# - setup integration tests
# - these require an openAI (and hugging face, etc) token
# - do so that they always run for commits on main
# - make the running be manually triggered for PRs (we don't want to burn through credits)
